home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / tools / pcd2 / src / pcd_main.has < prev    next >
Text File  |  1997-02-27  |  16KB  |  909 lines

  1.     .include    doscall.mac
  2.     .include    iocscall.mac
  3.     .xdef    PCD_MAIN
  4.     .xdef    BASEDATA_X
  5.     .xdef    BASEDATA_S,TC1
  6.     .xref    ChkPCD
  7.     .xref    Seek_PCD
  8.     .xref    IMAGE_NUM
  9.     .xref    DEC_WORK
  10.     .xref    SW_S,SW_Q,SW_K,SW_PF,FLG_WP
  11.     .xref    YCC2XHI_S,YCC2XHI_X,YCC2XHI_S2
  12.     .xref    Graph_Ptr
  13.     .xref    GetFHdl_Break
  14.     .xref    SW_LX,SW_LY,VCR2
  15.     .xref    K_Clear,KEY_DATA,key_chk,Now,Previous,Next,SEL,MN_FLG
  16.     .xref    YCC2FUL,V_FLAME,V_XY,Wipe,PlayAudioMSF
  17.  
  18.     .cpu    68000
  19.  
  20. *------------------------------
  21. * ファイルハンドルのデータを表示する
  22. *------------------------------
  23. PCD_MAIN:
  24.     movem.l    d1-d7/a0-a6,-(sp)
  25.     clr.w    KEY_DATA        *            [pcd_pf.has]
  26.     clr.l    EXITCODE
  27.     move.w    d0,FHdl
  28.     bsr    ChkPCD        * ファイル構造を審査する    [chkpcd.has]
  29.     tst.l    d0
  30.     bmi    PCD_MAIN_NoPCD
  31.     tst.w    d0
  32.     bmi    PCD_MAIN_OVERVIEW
  33.  
  34.     move.w    (IMAGE_NUM),d1    * 指定データが存在するかチェック
  35. @@:    btst.l    d1,d0
  36.     bne    @f
  37.     lsr.w    #1,d1
  38.     beq    PCD_MAIN_NoPic
  39.     bra    @b
  40. @@:    move.w    d1,IMAGE_DAT
  41.  
  42.     move.w    FHdl,d0
  43.     bsr    Seek_PCD    * 画像データ位置までSEEK        [chkpcd.has]
  44.  
  45.     lea.l    (DEC_WORK),a1
  46.     add.w    d1,d1
  47.  
  48.     clr.l    -(sp)
  49.     DOS    _SUPER
  50.     move.l    d0,(sp)
  51.  
  52.     tst.l    V_FLAME
  53.     bge    GA_Mode
  54.  
  55.     tst.b    (SW_S)
  56.     bne    Square_Mode
  57.  
  58.     tas    FLG_G_Mode
  59.     bne    @f
  60.     lea.l    ($c00000),a0
  61.     move.w    (SW_LY),d2
  62.     lea.l    1f,a3
  63.     cmp.w    (a3,d1.w),d2
  64. *    cmp.w    (1f,pc,d1.w),d2
  65.     bgt    Locate_err
  66.     mulu.w    #1024,d2
  67.     adda.l    d2,a0
  68.     move.w    (SW_LX),d2
  69.     lea.l    1f,a3
  70.     cmp.w    (a3,d1.w),d2
  71. *    cmp.w    (1f,pc,d1.w),d2
  72.     bgt    Locate_err
  73.     add.w    d2,d2
  74.     adda.w    d2,a0
  75.     move.l    a0,(Graph_Ptr)
  76.     bsr    Set_Graph_32
  77.     tst.b    FLG_WP
  78.     bne    @f
  79.     bsr    Wipe
  80.  
  81. @@:
  82.     lea.l    (BASEDATA_X),a0
  83.     add.w    (a0,d1.w),a0
  84.  
  85.     move.l    (a0)+,(a1)+
  86.     move.l    (a0)+,(a1)+
  87.     move.l    (a0)+,(a1)+
  88.     move.w    #512*2,(a1)+
  89.     move.w    #512*2*2,(a1)+
  90.  
  91.     lea.l    (DEC_WORK),a1
  92.     move.l    (Graph_Ptr),a0
  93.     move.w    (FHdl),d0
  94.     bsr    YCC2XHI_X    * 画像を展開する        [pcddec.has]
  95.     bra    PM_1
  96.  
  97. GA_Mode:
  98.     tas    FLG_G_Mode
  99.     bne    @f
  100.     move.w    (SW_LY),d2
  101.     cmp.w    (1f,pc,d1.w),d2
  102.     bgt    Locate_err
  103.     move.w    (SW_LX),d2
  104.     cmp.w    (1f,pc,d1.w),d2
  105.     bgt    Locate_err
  106.     move.w    SW_LX,d2
  107.     swap    d2
  108.     move.w    SW_LY,d2
  109.     move.l    d2,V_XY
  110.     move.w    ($e82600),(VCR2)
  111.     tst.b    FLG_WP
  112.     bne    @f
  113.     bsr    Wipe
  114. @@:
  115.     lea.l    (BASEDATA_S),a0
  116.     add.w    (a0,d1.w),a0
  117.     move.l    (a0)+,(a1)+
  118.     move.l    (a0)+,(a1)+
  119.     move.l    (a0)+,(a1)+
  120.     move.w    IMAGE_NUM,d1
  121.     add.w    d1,d1
  122.     add.w    d1,d1
  123.     move.l    (a0,d1.w),(a1)+
  124.  
  125.     lea.l    (DEC_WORK),a1
  126.     move.l    (Graph_Ptr),a0
  127.     move.w    (FHdl),d0
  128.     bsr    YCC2FUL        * 画像を展開する        [pcd_ga.has]
  129.     bra    PM_1
  130.  
  131.  
  132.     .align    4
  133. 1:    .dc.w    512-128,512-256,512-512        * 3:2モード時の座標指定XY最大値
  134.                         * 1:1モード時の座標指定Y最大値
  135. 2:    .dc.w    512-192,512-384,0        * 1:1モード時の座標指定X最大値
  136. Square_Mode:
  137.     tas    FLG_G_Mode
  138.     bne    @f
  139.     lea.l    ($c00000),a0
  140.     move.w    (SW_LY),d2
  141.     cmp.w    (1b,pc,d1.w),d2
  142.     bgt    Locate_err
  143.     mulu.w    #1024,d2
  144.     adda.l    d2,a0
  145.     move.w    (SW_LX),d2
  146.     cmp.w    (2b,pc,d1.w),d2
  147.     bgt    Locate_err
  148.     add.w    d2,d2
  149.     adda.w    d2,a0
  150.     move.l    a0,(Graph_Ptr)
  151.     bsr    Set_Graph_11
  152. @@:
  153.     cmpi.w    #2*2,d1
  154.     bne    @f
  155.     tst.b    (SW_S)
  156.     bne    Square_768
  157. @@:
  158.     lea.l    (BASEDATA_S),a0
  159.     add.w    (a0,d1.w),a0
  160.  
  161.     move.l    (a0)+,(a1)+
  162.     move.l    (a0)+,(a1)+
  163.     move.l    (a0)+,(a1)+
  164.     move.w    #512*2,(a1)+
  165.     move.w    #512*2*2,(a1)+
  166.  
  167.     lea.l    (DEC_WORK),a1
  168.     move.l    (Graph_Ptr),a0
  169.     move.w    (FHdl),d0
  170.     bsr    YCC2XHI_S    * 画像を展開する        [pcddec.has]
  171. PM_1:    tst.l    d0
  172.     bmi    Other_err
  173.  
  174.     IOCS    _B_KEYSNS
  175.     tst.l    d0
  176.     beq    5f
  177.     IOCS    _B_KEYINP
  178.     tst.b    (SW_PF)
  179.     beq    @f
  180.     bsr    key_chk
  181.     move.w    d0,KEY_DATA
  182.     clr.l    d0
  183.     bra    6f
  184. @@:    lsr.w    #8,d0
  185.     cmpi.b    #1,d0    * ESCが押された
  186.     beq    PM_ESC
  187.     cmpi.b    #6*8+5,d0    * SPACEが押された
  188.     bne    5f
  189.  
  190. 4:    IOCS    _B_KEYSNS    * スペースキーで展開を一時停止(停止時は再開)
  191.     tst.l    d0
  192.     beq    4b
  193.     IOCS    _B_KEYINP
  194.  
  195.     lsr.w    #8,d0
  196.     cmpi.b    #1,d0        * ESC
  197.     beq    PM_ESC
  198.     cmpi.b    #9*8+6,d0    * ENTER
  199.     beq    6f
  200.     cmpi.b    #3*8+5,d0    * CR
  201.     beq    6f
  202.     cmpi.b    #6*8+5,d0    * SPACE
  203.     bne    4b
  204.     bra    6f
  205. 5:
  206.     tst.b    (SW_PF)
  207.     bne    6f
  208.     tst.b    (SW_K)
  209.     beq    6f
  210.     cmpi.b    #9*8+6,d0    * ENTER
  211.     beq    6f
  212.     cmpi.b    #3*8+5,d0    * CR
  213.     beq    6f
  214.     cmpi.b    #1,d0        * ESC
  215.     beq    PM_ESC
  216.  
  217. @@:    IOCS    _B_KEYSNS
  218.     tst.l    d0
  219.     beq    @b
  220.  
  221.     IOCS    _B_KEYINP
  222.     lsr.w    #8,d0
  223.     bra    5b
  224. PM_ESC:
  225.     move.l    #-4,EXITCODE
  226. 6:
  227.     DOS    _SUPER
  228.     addq.l    #4,sp
  229.     move.l    EXITCODE,d0
  230.     cmpi.w    #103,KEY_DATA
  231.     beq    @f
  232.     tst.w    KEY_DATA
  233.     bne    PCD_MAIN_exit
  234. @@:    bsr    PlayAudioMSF
  235. PCD_MAIN_exit:
  236.     clr.b    (FLG_MM)
  237.     clr.b    (FLG_TM)
  238.     clr.b    (FLG_G_Mode)
  239.     movem.l    (sp)+,d1-d7/a0-a6
  240.     rts
  241. PCD_MAIN_NoPCD:
  242.     moveq.l    #1,d0
  243.     bra    PCD_MAIN_exit
  244. PCD_MAIN_OVERVIEW:
  245.     andi.w    #$7fff,d0    * d0=枚数
  246.     move.w    d0,d7        * d7=枚数
  247.     subq    #1,d7        * d7=表示カウンタ
  248.     clr.w    -(sp)
  249.     move.l    #$2800,-(sp)
  250.     move.w    FHdl,-(sp)
  251.     DOS    _SEEK        * 画像データ位置までSEEK
  252.     addq.l    #8,sp
  253.  
  254.     clr.l    -(sp)
  255.     DOS    _SUPER
  256.     move.l    d0,(sp)
  257.  
  258.     tst.l    V_FLAME
  259.     bge    PM_OV_GA_Mode
  260.     tst.b    (SW_S)
  261.     bne    PM_OV_Square_Mode
  262.  
  263.     tst.b    (FLG_G_Mode)    * OVERVIEW.PCDではLOCATE情報を無視するので、
  264.     bne    @f        * フラグをセットしない
  265.     bsr    Set_Graph_32
  266.     tst.b    FLG_WP
  267.     bne    @f
  268.     bsr    Wipe
  269. @@:
  270.     lea.l    (LOC_32),a5    * locate情報の初期値
  271.     lea.l    (YCC2XHI_X),a4    * 展開ルーチンの実行アドレス
  272.     lea.l    (DEC_WORK),a1
  273.     lea.l    (BASE_1_16_X),a0
  274.     move.l    (a0)+,(a1)+
  275.     move.l    (a0)+,(a1)+
  276.     move.l    (a0)+,(a1)+
  277.     move.w    #512*2,(a1)+
  278.     move.w    #512*2*2,(a1)+
  279.     lea.l    (DEC_WORK),a1
  280.     lea.l    (a5),a3
  281.     bra    PM_OV_loop
  282. PM_OV_Square_Mode:
  283.     tst.b    (FLG_G_Mode)    * OVERVIEW.PCDではLOCATE情報を無視するので、
  284.     bne    @f        * フラグをセットしない
  285.     bsr    Set_Graph_11
  286. @@:
  287.     lea.l    (LOC_11),a5    * locate情報の初期値
  288.     lea.l    (YCC2XHI_S),a4    * 展開ルーチンの実行アドレス
  289.     lea.l    (DEC_WORK),a1
  290.     lea.l    (BASE_1_16_S),a0
  291.     move.l    (a0)+,(a1)+
  292.     move.l    (a0)+,(a1)+
  293.     move.l    (a0)+,(a1)+
  294.     move.w    #512*2,(a1)+
  295.     move.w    #512*2*2,(a1)+
  296.     lea.l    (DEC_WORK),a1
  297.     lea.l    (a5),a3
  298.     bra    PM_OV_loop
  299. PM_OV_GA_Mode:
  300.     tst.b    (FLG_G_Mode)    * OVERVIEW.PCDではLOCATE情報を無視するので、
  301.     bne    @f        * フラグをセットしない
  302.     move.w    ($e82600),(VCR2)
  303.     tst.b    FLG_WP
  304.     bne    @f
  305.     bsr    Wipe
  306. @@:
  307.     lea.l    (LOC_GA),a5    * locate情報の初期値
  308.     lea.l    (YCC2FUL),a4    * 展開ルーチンの実行アドレス
  309.     lea.l    (DEC_WORK),a1
  310.     lea.l    (BASE_1_16_S),a0
  311.     move.l    (a0)+,(a1)+
  312.     move.l    (a0)+,(a1)+
  313.     move.l    (a0)+,(a1)+
  314.     move.w    #512*2,(a1)+
  315.     move.w    #512*2*2,(a1)+
  316.     lea.l    (DEC_WORK),a1
  317.     lea.l    (a5),a3
  318.     bra    PM_OV_loop
  319. PM_OV_loop:
  320.     lea.l    ($c00000),a0
  321.     clr.l    V_XY
  322.     move.w    (a3)+,d0
  323.     bpl    @f
  324.     lea.l    (a5),a3
  325. 1:    IOCS    _B_KEYSNS
  326.     tst.l    d0
  327.     beq    1b
  328.     IOCS    _B_KEYINP
  329.     lsr.w    #8,d0
  330.     cmpi.b    #1,d0        * ESC
  331.     beq    ESC_ON
  332.     cmpi.b    #9*8+6,d0    * ENTER
  333.     beq    PASS_ON
  334.     cmpi.b    #3*8+5,d0    * CR
  335.     beq    PASS_ON
  336.  
  337.     move.w    (a3)+,d0
  338. @@:    move.w    d0,V_XY
  339.     add.w    d0,d0
  340.     adda.w    d0,a0
  341.     move.w    (a3)+,d0
  342.     move.w    d0,V_XY+2
  343.     mulu.w    #1024,d0
  344.     add.l    d0,a0
  345.     move.w    FHdl,d0
  346.     jsr    (a4)
  347.     tst.l    d0
  348.     bmi    PM_OV_DEC_err
  349.  
  350.     IOCS    _B_KEYSNS
  351.     tst.l    d0
  352.     beq    9f
  353.  
  354.     IOCS    _B_KEYINP
  355.     lsr.w    #8,d0
  356.     cmpi.b    #1,d0        * ESC
  357.     beq    ESC_ON
  358.     cmpi.b    #9*8+6,d0    * ENTER
  359.     beq    PASS_ON
  360.     cmpi.b    #3*8+5,d0    * CR
  361.     beq    PASS_ON
  362.     cmpi.b    #6*8+5,d0    * SPACE
  363.     bne    9f
  364.  
  365. 1:    IOCS    _B_KEYSNS    * スペースキーで展開を一時停止(停止時は再開)
  366.     tst.l    d0
  367.     beq    1b
  368.     IOCS    _B_KEYINP
  369.  
  370.     lsr.w    #8,d0
  371.     cmpi.b    #1,d0        * ESC
  372.     beq    ESC_ON
  373.     cmpi.b    #9*8+6,d0    * ENTER
  374.     beq    PASS_ON
  375.     cmpi.b    #3*8+5,d0    * CR
  376.     beq    PASS_ON
  377.     cmpi.b    #6*8+5,d0    * SPACE
  378.     bne    1b
  379.  
  380. 9:
  381.     dbra    d7,PM_OV_loop
  382.     tst.b    (SW_K)
  383.     beq    PASS_ON
  384. @@:    IOCS    _B_KEYSNS
  385.     tst.l    d0
  386.     beq    @b
  387.     IOCS    _B_KEYINP
  388.     lsr.w    #8,d0
  389.     cmpi.b    #9*8+6,d0    * ENTER
  390.     beq    PASS_ON
  391.     cmpi.b    #3*8+5,d0    * CR
  392.     beq    PASS_ON
  393.     cmpi.b    #1,d0        * ESC
  394.     beq    PASS_ON
  395.     bra    @b
  396.  
  397. PASS_ON:
  398.     cmpi.w    #2,IMAGE_NUM
  399.     bcc    @f
  400.     clr.b    FLG_WP
  401. @@:    DOS    _SUPER
  402.     addq.l    #4,sp
  403.  
  404.     moveq.l    #0,d0
  405.     bra    PCD_MAIN_exit
  406. ESC_ON:
  407.     cmpi.w    #2,IMAGE_NUM
  408.     bcc    @f
  409.     clr.b    FLG_WP
  410. @@:    DOS    _SUPER
  411.     addq.l    #4,sp
  412.  
  413.     moveq.l    #-4,d0
  414.     bra    PCD_MAIN_exit
  415.  
  416. PM_OV_DEC_err:
  417.     DOS    _SUPER
  418.     addq.l    #4,sp
  419.  
  420.     moveq.l    #-5,d0
  421.     bra    PCD_MAIN_exit
  422.     
  423.  
  424.     .data
  425.     .align    4
  426. LOC_32:    .dc.w    0,0,128,0,256,0,384,0,0,128,128,128,256,128,384,128
  427.     .dc.w    0,256,128,256,256,256,384,256,0,384,128,384,256,384,384,384,-1
  428. LOC_11:    .dc.w    0,0,256,0,0,128,256,128,0,256,256,256,0,384,256,384,-1
  429. LOC_GA:    .dc.w    0,0,192,0,384,0,576,0,0,128,192,128,384,128,576,128
  430.     .dc.w    0,256,192,256,384,256,576,256,0,384,192,384,384,384,576,384,-1
  431.     .text
  432. PCD_MAIN_NoPic:
  433.     moveq.l    #1,d0
  434.     bra    PCD_MAIN_exit
  435. Locate_err:
  436.     DOS    _SUPER
  437.     addq.l    #4,sp
  438.     moveq.l    #-2,d0
  439.     bra    PCD_MAIN_exit
  440. Other_err:
  441.     exg    d0,d7
  442.     DOS    _SUPER
  443.     addq.l    #4,sp
  444.     exg    d0,d7
  445.     bra    PCD_MAIN_exit    
  446. *------------------------------
  447. *512*512モードを作る
  448. *------------------------------
  449. Set_Graph_32:
  450.     movem.l    d0-d2/d7,-(sp)
  451.     moveq.l    #-1,d1
  452.     IOCS    _CRTMOD
  453.     cmpi.w    #12,d0
  454.     beq    1f
  455.     moveq.l    #12,d1
  456.     tst.b    (SW_Q)
  457.     beq    @f
  458.     add.w    #$100,d1
  459.     moveq.l    #-1,d1
  460.     IOCS    _B_LOCATE
  461.     move.l    d0,d7
  462. @@:
  463.     IOCS    _CRTMOD
  464.     IOCS    _G_CLR_ON
  465.  
  466.     tst.b    (SW_Q)
  467.     beq    @f
  468.  
  469.     move.w    d7,d2
  470.     swap    d7
  471.     move.w    d7,d1
  472.     IOCS    _B_LOCATE
  473.  
  474. @@:
  475. 1:
  476.     move.w    ($e82600),d0
  477.     move.w    d0,(VCR2)
  478.     tst.b    (SW_Q)
  479.     beq    @f
  480.     andi.w    #$ffdf,d0
  481.     move.w    d0,($e82600)
  482. @@:
  483.  
  484.     tst.b    (SW_Q)
  485.     bne    @f
  486.     IOCS    _OS_CUROF
  487.     moveq.l    #0,d1
  488.     IOCS    _SKEY_MOD
  489.     pea    (Clear_txt)
  490.     DOS    _PRINT
  491.     addq.l    #4,sp
  492. @@:
  493.     movem.l    (sp)+,d0-d2/d7
  494.     rts
  495. *------------------------------
  496. * 768*512モードを作る
  497. *------------------------------
  498. Set_Graph_11:
  499.     movem.l    d0-d2/a1,-(sp)
  500.     moveq.l    #-1,d1
  501.     IOCS    _B_LOCATE
  502.     move.l    d0,d2
  503.     moveq.l    #-1,d1
  504.     IOCS    _CRTMOD
  505.     cmpi.w    #16,d0
  506.     beq    1f
  507.     moveq.l    #16,d1
  508.     tst.b    (SW_Q)
  509.     beq    @f
  510.     add.w    #$100,d1
  511. @@:
  512.     IOCS    _CRTMOD
  513. 1:
  514.     IOCS    _G_CLR_ON
  515.     tst.b    (SW_Q)
  516.     beq    @f
  517.     swap    d2
  518.     move.w    d2,d1
  519.     swap    d2
  520.     IOCS    _B_LOCATE
  521. @@:
  522.     tst.b    (SW_Q)
  523.     bne    @f
  524.     pea    (Clear_txt)
  525.     DOS    _PRINT
  526.     addq.l    #4,sp
  527.     IOCS    _OS_CUROF
  528.     moveq.l    #0,d1
  529.     IOCS    _SKEY_MOD
  530. @@:
  531.     tst.b    FLG_SC
  532.     bne    @f
  533.     move.w    ($e82600),d0
  534.     move.w    d0,(VCR2)
  535.     st    FLG_SC
  536. @@:    tst.b    (SW_Q)
  537.     beq    @f
  538.     andi.w    #$ffdf,d0
  539.     move.w    d0,($e82600)
  540. @@:
  541.     move.w    #$316,($e80028)
  542.     move.w    #$3,($e82400)
  543.     lea.l    ($e82000),a1
  544.     move.l    #$00010001,d0
  545.     move.l    #$02020202,d1
  546.     move.w    #127,d2
  547. 2:
  548.     move.l    d0,(a1)+
  549.     add.l    d1,d0
  550.     dbra    d2,2b
  551.  
  552.     move.w    #512-128,d0
  553.     move.w    d0,$e80018
  554.     move.w    d0,$e8001c
  555.     move.w    d0,$e80020
  556.     move.w    d0,$e80024
  557.  
  558.     tst.b    (SW_Q)
  559.     bne    9f
  560.     tst.w    (TC1)
  561.     bne    @f
  562.     move.w    ($e82202),(TC1)
  563. @@:    move.w    #1,($e82202)
  564.     lea.l    (TXFL0),a1
  565.     IOCS    _TXFILL
  566.     lea.l    (TXFL1),a1
  567.     IOCS    _TXFILL
  568. 9:
  569.     movem.l    (sp)+,d0-d2/a1
  570.     rts
  571. TXFL0:    .dc.w    0,0,0,128,512,-1
  572. TXFL1:    .dc.w    0,640,0,128,512,-1
  573. Square_768:
  574.     tst.b    (FLG_MM)
  575.     bne    S768_MM_OK
  576.     tst.b    (FLG_TM)
  577.     bne    S768_MM_OK
  578.     tst.b    (SW_Q)
  579.     bne    S768_MMget
  580.     bra    S768_TMget
  581. S768_MM_OK:
  582.     move.w    #512-128,d0
  583.     move.w    d0,$e80018
  584.     move.w    d0,$e8001c
  585.     move.w    d0,$e80020
  586.     move.w    d0,$e80024
  587.  
  588.     lea.l    (DEC_WORK),a1
  589.     lea.l    (BASE_1_S),a0
  590.     move.l    (a0)+,(a1)+
  591.     move.l    (a0)+,(a1)+
  592.     move.l    (a0)+,(a1)+
  593.     move.w    #512*2,(a1)+
  594.     move.w    #512*2*2,(a1)+
  595.  
  596.     lea.l    (DEC_WORK),a1
  597.     lea.l    ($c00000),a0
  598.     move.l    (S768T_PTR),a2
  599.     move.w    (FHdl),d0
  600.     bsr    YCC2XHI_S2    * 画像を展開する        [pcddec.has]
  601.     tst.l    d0
  602.     bmi    S768_dec_err
  603.  
  604.     tst.b    (SW_PF)
  605.     beq    @f
  606.     IOCS    _B_KEYSNS
  607.     tst.l    d0
  608.     beq    @f
  609.     IOCS    _B_KEYINP
  610.     bsr    key_chk
  611.     tst.l    d0
  612.     beq    @f
  613.     cmpi.w    #103,d0
  614.     beq    @f
  615.     move.w    d0,KEY_DATA
  616.     clr.l    d0
  617.     bra    1f
  618. @@:    bsr    Scroll_Mode
  619. 1:    move.l    d0,EXITCODE
  620.     tst.b    (FLG_MM)        * 使用メモリを逃がす
  621.     beq    @f
  622.     move.l    (S768M_PTR),-(sp)
  623.     DOS    _MFREE
  624.     addq.l    #4,sp
  625. @@:
  626.     move.l    (S768T_PTR),-(sp)
  627.     DOS    _MFREE
  628.     addq.l    #4,sp
  629.  
  630.     DOS    _SUPER
  631.     addq.l    #4,sp
  632.     move.l    EXITCODE,d0
  633.     bra    PCD_MAIN_exit
  634.  
  635. Scroll_Mode:
  636.     bsr    PlayAudioMSF
  637. @@:    move.w    #0,d7        * スクロール現在値(初期値=0)
  638.     move.l    (S768T_PTR),a1
  639.     sf    d1        * スクロール方向を示すフラグ
  640. SM_loop:            * 実はこのルーチン、テキトーです。
  641.     btst.b    #6,($806)    *HOME
  642.     beq    @f
  643.     tst.l    Now
  644.     beq    SM_loop
  645.     move.w    #100,KEY_DATA
  646.     bra    SM_exit
  647. @@:    btst.b    #1,($807)    *ROLL DOWN
  648.     beq    @f
  649.     move.l    Previous,d0
  650.     cmp.l    Now,d0
  651.     beq    SM_loop
  652.     move.w    #101,KEY_DATA
  653.     bra    SM_exit
  654. @@:    btst.b    #0,($807)    *ROLL UP
  655.     beq    @f
  656.     move.l    Next,d0
  657.     cmp.l    Now,d0
  658.     beq    SM_loop
  659.     move.w    #102,KEY_DATA
  660.     bra    SM_exit
  661. @@:    btst.b    #2,($807)    *UNDO
  662.     beq    @f
  663.     move.w    #104,KEY_DATA
  664.     bra    SM_exit
  665. @@:    btst.b    #3,($809)    *1
  666.     beq    @f
  667.     move.w    #1,KEY_DATA
  668.     bra    SM_exit
  669. @@:    btst.b    #4,($809)    *2
  670.     beq    @f
  671.     tst.b    MN_FLG
  672.     beq    1f
  673.     cmpi.w    #2,SEL
  674.     bcs    SM_loop
  675. 1:    move.w    #2,KEY_DATA
  676.     bra    SM_exit
  677. @@:    btst.b    #5,($809)    *3
  678.     beq    @f
  679.     tst.b    MN_FLG
  680.     beq    1f
  681.     cmpi.w    #3,SEL
  682.     bcs    SM_loop
  683. 1:    move.w    #3,KEY_DATA
  684.     bra    SM_exit
  685. @@:    btst.b    #7,($808)    *4
  686.     beq    @f
  687.     tst.b    MN_FLG
  688.     beq    1f
  689.     cmpi.w    #4,SEL
  690.     bcs    SM_loop
  691. 1:    move.w    #4,KEY_DATA
  692.     bra    SM_exit
  693. @@:    btst.b    #0,($809)    *5
  694.     beq    @f
  695.     tst.b    MN_FLG
  696.     beq    1f
  697.     cmpi.w    #5,SEL
  698.     bcs    SM_loop
  699. 1:    move.w    #5,KEY_DATA
  700.     bra    SM_exit
  701. @@:    btst.b    #1,($809)    *6
  702.     beq    @f
  703.     tst.b    MN_FLG
  704.     beq    1f
  705.     cmpi.w    #6,SEL
  706.     bcs    SM_loop
  707. 1:    move.w    #6,KEY_DATA
  708.     bra    SM_exit
  709. @@:    btst.b    #3,($808)    *7
  710.     beq    @f
  711.     tst.b    MN_FLG
  712.     beq    1f
  713.     cmpi.w    #7,SEL
  714.     bcs    SM_loop
  715. 1:    move.w    #7,KEY_DATA
  716.     bra    SM_exit
  717. @@:    btst.b    #4,($808)    *8
  718.     beq    @f
  719.     tst.b    MN_FLG
  720.     beq    1f
  721.     cmpi.w    #8,SEL
  722.     bcs    SM_loop
  723. 1:    move.w    #8,KEY_DATA
  724.     bra    SM_exit
  725. @@:    btst.b    #5,($808)    *9
  726.     beq    @f
  727.     tst.b    MN_FLG
  728.     beq    1f
  729.     cmpi.w    #9,SEL
  730.     bcs    SM_loop
  731. 1:    move.w    #9,KEY_DATA
  732.     bra    SM_exit
  733. @@:    btst.b    #1,($800)    *ESC
  734.     bne    SM_exit_2
  735.     btst.b    #6,($809)    * ENTER
  736.     bne    SM_next
  737.     btst.b    #5,($803)    * CR
  738.     bne    SM_next
  739.  
  740.     btst.b    #5,($806)    * SP
  741.     bne    SM_exit
  742.     move.b    ($807),d0
  743.     btst.l    #3,d0        * ←
  744.     beq    SM_L_pass
  745.     tst.w    d7
  746.     beq    SM_loop
  747.     subq    #1,d7
  748.     st    d1
  749.     bra    SM_OK
  750. SM_L_pass:
  751.     btst.l    #5,d0        * →
  752.     beq    SM_loop
  753.     cmp.w    #254,d7
  754.     beq    SM_loop
  755.     addq    #1,d7
  756.     sf    d1
  757. SM_OK:
  758.     lea.l    ($c00000-2),a0
  759.     add.w    d7,a0
  760.     add.w    d7,a0
  761.     move.w    d7,d0
  762.     sub    #1,d0
  763.     tst.b    d1
  764.     beq    @f
  765.     addq    #2,a0
  766.     addq    #1,d0
  767.  
  768. @@:    add.w    d0,d0
  769.     bsr    SWAP_LINE
  770.     move.w    d7,d6
  771.     add.w    #512-128,d6
  772.     move.w    d6,$e80018
  773.     move.w    d6,$e8001c
  774.     move.w    d6,$e80020
  775.     move.w    d6,$e80024
  776.     bra    SM_loop
  777. SM_next:
  778.     move.w    #107,KEY_DATA
  779. SM_exit:
  780.     tst.w    KEY_DATA
  781.     bne    @f
  782.     move.w    #-1,KEY_DATA
  783. @@:    bsr    K_Clear        *キーバッファクリア
  784.     moveq.l    #0,d0
  785.     rts
  786. SM_exit_2:
  787.     moveq.l    #-4,d0
  788.     rts
  789. S768_dec_err:
  790.     DOS    _SUPER
  791.     addq.l    #4,sp
  792.     moveq.l    #-1,d0
  793.     bra    PCD_MAIN_exit
  794. *------------------------------
  795. * TVRAMをワークに使う準備をする
  796. *------------------------------
  797. S768_TMget:
  798.     move.l    #512*4,-(sp)
  799.     DOS    _MALLOC
  800.     addq.l    #4,sp
  801.     tst.l    d0
  802.     bmi    S768_MMget_err
  803.     move.l    d0,(S768T_PTR)
  804.     move.l    d0,a0
  805.     lea.l    ($e10000),a1
  806.     move.w    #256*2,d1
  807.     move.w    #3,d3
  808. 1:    move.w    #127,d2
  809. @@:    move.l    a1,(a0)+
  810.     adda.w    d1,a1
  811.     dbra    d2,@b
  812.     add.l    #$10000,a1
  813. *    lea.l    ($10000,a1),a1
  814.     dbra    d3,1b
  815.     st    FLG_TM
  816.     bra    S768_MM_OK
  817. *------------------------------
  818. * MAINRAMをワークに使う準備をする
  819. *------------------------------
  820. S768_MMget:
  821.     move.l    #256*2*512,-(sp)
  822.     DOS    _MALLOC
  823.     addq.l    #4,sp
  824.     tst.l    d0
  825.     bmi    S768_MMget_err
  826.     move.l    d0,(S768M_PTR)
  827.  
  828.     move.l    #512*4,-(sp)
  829.     DOS    _MALLOC
  830.     addq.l    #4,sp
  831.     tst.l    d0
  832.     bmi    S768_MMget_err2
  833.     move.l    d0,(S768T_PTR)
  834.     move.l    d0,a0
  835.     move.l    (S768M_PTR),a1
  836.     move.w    #256*2,d1
  837.     move.w    #511,d2
  838. @@:
  839.     move.l    a1,(a0)+
  840.     adda.w    d1,a1
  841.     dbra    d2,@b
  842.     st    FLG_MM
  843.     bra    S768_MM_OK
  844.  
  845.  
  846.  
  847. S768_MMget_err2:
  848.     move.l    (S768M_PTR),-(sp)
  849.     DOS    _MFREE
  850.     addq.l    #4,sp
  851. S768_MMget_err:
  852.     DOS    _SUPER
  853.     addq.l    #4,sp
  854.     moveq.l    #-3,d0
  855.     bra    PCD_MAIN_exit
  856.  
  857. SWAP_LINE:
  858. * in d0.w=オフセット
  859. * in a0=グラフィックアドレス
  860. * in a1=ポインタテーブルアドレス
  861.     movem.l    d1/d7/a0-a2,-(sp)
  862.     move.w    #511,d7
  863. @@:
  864.     move.w    (a0),d1
  865.     move.l    (a1)+,a2
  866.     adda.w    d0,a2
  867.     move.w    (a2),(a0)
  868.     move.w    d1,(a2)
  869.     lea.l    (1024,a0),a0
  870.     dbra    d7,@b
  871.     movem.l    (sp)+,d1/d7/a0-a2
  872.     rts
  873.  
  874.     .data
  875. FLG_G_Mode:    .dc.b    0
  876. FLG_MM:        .dc.b    0
  877. FLG_TM:        .dc.b    0
  878. Clear_txt:    .dc.b    $1a,0
  879. FLG_SC:        .dc.b    0
  880.     .align    4
  881. TC1:    .dc.w    0
  882. EXITCODE:    .dc.l    0
  883. IMAGE_DAT:    .dc.w    2
  884. FHdl:        .dc.w    0
  885. BASEDATA_X:
  886.     .dc.w    BASE_1_16_X-BASEDATA_X
  887.     .dc.w    BASE_1_4_X-BASEDATA_X
  888.     .dc.w    BASE_1_X-BASEDATA_X
  889. BASE_1_16_X:
  890.     .dc.w    192*3,192*4,192/6-1,128/2-1,192/2-1,192*2-1
  891. BASE_1_4_X:
  892.     .dc.w    384*3,384*4,384/6-1,256/2-1,384/2-1,384*2-1
  893. BASE_1_X:
  894.     .dc.w    768*3,768*4,768/6-1,512/2-1,768/2-1,768*2-1
  895. BASEDATA_S:
  896.     .dc.w    BASE_1_16_S-BASEDATA_S
  897.     .dc.w    BASE_1_4_S-BASEDATA_S
  898.     .dc.w    BASE_1_S-BASEDATA_S
  899. BASE_1_16_S:
  900.     .dc.w    192*3,192*4,192/2-1,128/2-1,192/2-1,192*2-1
  901. BASE_1_4_S:
  902.     .dc.w    384*3,384*4,384/2-1,256/2-1,384/2-1,384*2-1
  903. BASE_1_S:
  904.     .dc.w    768*3,768*4,768/2-1,512/2-1,768/2-1,768*2-1
  905.     .bss
  906.     .align    4
  907. S768M_PTR:    .ds.l    1
  908. S768T_PTR:    .ds.l    1
  909.